// pages/user/user.js
const userApi = require('../../api/user');
const orderApi = require('../../api/order');
const cartApi = require('../../api/cart');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 用户信息
    userInfo: {
    },
    // 最近订单列表
    recentOrders: [
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 获取用户信息
    this.getUserInfo();
    // 获取最近订单
    this.getRecentOrders();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面时刷新最近订单
    this.getRecentOrders();
  },

  // 获取用户信息
  getUserInfo() {
    // 从本地存储获取用户信息
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.setData({
        userInfo: userInfo
      });
    }
  },

  // 退出登录
  logout() {
    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          userApi.logout().then(res => {
            if (res.code === 1) {
              // 清除本地存储的登录信息
              wx.removeStorageSync('token');
              wx.removeStorageSync('userInfo');
              
              // 清空购物车
              cartApi.clearCart().catch(err => {
                console.error('清空购物车失败:', err);
              });
              
              // 返回首页
              wx.reLaunch({
                url: '/pages/index/index'
              });
            } else {
              wx.showToast({
                title: '退出失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            console.error('退出失败', err);
            wx.showToast({
              title: '退出失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 获取最近订单
  getRecentOrders() {
    // 调用API获取最近5条订单数据
    orderApi.getHistoryOrders({
      page: 1,
      pageSize: 5,
    }).then(res => {
      if (res.code === 1) {
        // 处理订单数据
        const orders = res.data.records.map(order => ({
          ...order,
          // 格式化订单时间
          orderTime: this.formatOrderTime(order.orderTime),
          // 转换订单状态
          status: this.getOrderStatusText(order.status),
          // 计算菜品总数
          dishCount: order.orderDetails ? order.orderDetails.reduce((total, detail) => total + detail.number, 0) : 0,
          // 提取订单菜品信息
          dishes: order.orderDetails ? order.orderDetails.map(detail => ({
            id: detail.dishId,
            name: detail.name,
            image: detail.image,
            price: detail.amount,
            spec: detail.dishFlavor
          })) : [],
          // 设置订单总金额
          amount: order.amount
        }));
        
        this.setData({
          recentOrders: orders
        });
      } else {
        wx.showToast({
          title: res.msg || '获取订单失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('获取最近订单失败:', err);
      wx.showToast({
        title: '获取最近订单失败',
        icon: 'none'
      });
    });
  },

  // 跳转到地址管理页面
  goToAddress() {
    wx.navigateTo({
      url: '/pages/address/address'
    });
  },

  // 跳转到历史订单页面
  goToOrderHistory() {
    wx.navigateTo({
      url: '/pages/orderHistory/orderHistory'
    });
  },

  // 查看订单详情
  viewOrderDetail(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/orderDetail/orderDetail?id=${id}`
    });
  },

  // 支付订单
  payOrder(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/payment/payment?id=${id}`
    });
  },

  // 格式化订单时间
  formatOrderTime(timestamp) {
    if (!timestamp) return '';
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const hour = date.getHours().toString().padStart(2, '0');
    const minute = date.getMinutes().toString().padStart(2, '0');
    return `${year}-${month}-${day} ${hour}:${minute}`;
  },

  // 获取订单状态文本
  getOrderStatusText(status) {
    const statusMap = {
      1: '待付款',
      2: '待接单',
      3: '已接单',
      4: '派送中',
      5: '已完成',
      6: '已取消'
    };
    return statusMap[status] || '未知状态';
  },

  // 再来一单
  reorder(e) {
    const id = e.currentTarget.dataset.id;
    
    // 调用再来一单接口
    orderApi.repeatOrder(id).then(res => {
      if (res.code === 1) {
        // 显示成功提示
        wx.showToast({
          title: '已添加到购物车',
          icon: 'success',
          duration: 1500,
          success: () => {
            // 跳转到首页
            setTimeout(() => {
              wx.switchTab({
                url: '/pages/index/index'
              });
            }, 1500);
          }
        });
      } else {
        wx.showToast({
          title: res.msg || '再来一单失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('再来一单失败:', err);
      wx.showToast({
        title: '再来一单失败',
        icon: 'none'
      });
    });
  },
  
  // 取消订单
  cancelOrder(e) {
    const id = e.currentTarget.dataset.id;
    
    wx.showModal({
      title: '提示',
      content: '确定要取消该订单吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          orderApi.cancelOrder(id).then(res => {
            if (res.code === 1) {
              wx.showToast({
                title: '订单已取消',
                icon: 'success',
                duration: 1500
              });
              // 刷新订单列表
              this.getRecentOrders();
            } else {
              wx.showToast({
                title: res.msg || '取消订单失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            console.error('取消订单失败:', err);
            wx.showToast({
              title: '取消订单失败',
              icon: 'none'
            });
          }).finally(() => {
            wx.hideLoading();
          });
        }
      }
    });
  },

  // 催单
  reminderOrder(e) {
    const id = e.currentTarget.dataset.id;
    
    wx.showLoading({
      title: '处理中...',
      mask: true
    });

    orderApi.reminderOrder(id).then(res => {
      if (res.code === 1) {
        wx.showToast({
          title: '已通知商家加快处理',
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.msg || '催单失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('催单失败:', err);
      wx.showToast({
        title: '催单失败',
        icon: 'none'
      });
    }).finally(() => {
      wx.hideLoading();
    });
  },

  // 添加返回按钮功能
  goBack() {
    wx.navigateBack();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})